// 封装axios
import axios from "axios";
// 单独引用element弹窗
import { MessageBox } from "element-ui";
// import compressImage from "@/assets/js/compressImage";
// import Vue from "vue";
// import qs from "qs";

// const isSupportFormData = Boolean(new FormData().get);
// const CONSOLELOG = function(message, type = "DCI Warning") {
//     console.log(
//         `%c ${type}: %c  ${message}`,
//         "background: #cc0d30; color: #fff; border-radius: 3px 0 0 3px;",
//         "background: #fff; color: #555; border-radius: 0 3px 3px 0;"
//     );
// };
// const instance = new Vue();

// 响应时间
axios.defaults.timeout = 500000;

// 配置请求头
axios.defaults.headers["Content-Type"] = "text/plain";

// 允许跨域携带cookie信息
axios.defaults.withCredentials = true;

// 请求拦截器
// axios.interceptors.request.use(
//     async config => {
//         const CONTENTTYPE = config.headers["Content-Type"].toLowerCase();

//         // 因重庆外网申请需要带额外的token参数, 因在此统一设置合并localStorage的key为jsondt的值
//         const JSONDT = JSON.parse(
//             window.localStorage.getItem("jsondt") || "{}"
//         );
//         config.data = Object.assign(config.data || {}, JSONDT);

//         // 请求福建闽政通接口需修改withCredentials=false，否则跨域
//         if (config.method === "get") {
//             config.withCredentials = false;
//         }

//         switch (CONTENTTYPE) {
//             case "multipart/form-data":
//                 // 在不支持get方法的浏览器下, 放弃对图片进行压缩
//                 if (!isSupportFormData) {
//                     return config;
//                 }
//                 return new Promise(resolve => {
//                     let file = config.data.get("files");
//                     // console.log(file);
//                     let isImage =
//                         file.type.indexOf("image") > -1 ? true : false;
//                     let isGreater1M =
//                         isImage && file.size > 1024000 ? true : false;
//                     let isPress = config.data.get("isPress");

//                     // 情况一： 非图片 => 不压缩
//                     // 情况二： 图片小于1M => 不压缩
//                     // 情况三： isPress==='false' => 不压缩
//                     if (!isImage || !isGreater1M || isPress === "false") {
//                         resolve();
//                     } else {
//                         let imgWidth = config.data.get("width");
//                         let imgHeight = config.data.get("height");

//                         compressImage(
//                             file,
//                             nFile => {
//                                 let formData = new FormData();
//                                 const originFile = file;

//                                 config.data.forEach((item, key) => {
//                                     if (key === "files") {
//                                         formData.append(
//                                             "files",
//                                             nFile,
//                                             originFile.name
//                                         );
//                                     } else {
//                                         formData.append(key, item);
//                                     }
//                                 });
//                                 config.data = formData;
//                                 resolve();
//                             },
//                             imgWidth,
//                             imgHeight
//                         );
//                     }
//                 }).then(() => {
//                     return config;
//                 });
//                 break;

//             case "text/plain":
//                 config.data = JSON.stringify(config.data);
//                 return config;
//                 break;
//             default:
//                 config.data = config.data;
//                 return config;
//                 break;
//         }
//     },
//     error => {
//         return Promise.reject(error);
//     }
// );

// 响应拦截器 (返回状态判断)
axios.interceptors.response.use(
    res => {
        let hasResult = res.data.hasOwnProperty("result");

        if (!hasResult) {
            CONSOLELOG('非公司接口规范格式','HUIYAN Warning');
            
            return res;
        } else {
            // 针对公司后台服务返回规范
            let data = res.data;
            if (hasResult && data.result === false) {
                // 默认拦截函数
                const interceptFn =  () => {
                    MessageBox.alert("用户权限已失效，请重新登录", "登录过期",
                        {
                            confirmButtonText: '重新登录',
                            callback: action => {
                                let localtion = window.location;
                                localtion.href = localtion.origin + localtion.pathname;
                            }
                        });
                    return new Promise(() => {});
                };
                return interceptFn();
            }
            return data.result_object;
        }
    },
    error => {
        // modal.alert({ content: '网络异常' + error });
        const message = error.message == "Network Error" ? "请求地址丢失" : error.message;
        CONSOLELOG(message);

        return Promise.reject(error);
    }
);

export default axios;
